//
//  CGFloat+Zoom.swift
//  TTCOM
//
//  Created by Toj on 3/11/24.
//

import Foundation

public extension CGFloat {
    
    /** 按系数scale 正比例缩放 */
    func zoom(k scale: CGFloat) -> CGFloat {
        guard scale > 0, scale != 1 else { return self }
        return self * scale
    }
    
    /** 按系数scale 反比例缩放 */
    func zoomr(k scale: CGFloat) -> CGFloat {
        return self / scale
    }
    
    /**
     缩放比例: 4:3
     ```
     240.zoom4_3
     = 240 * 4 / 3
     = 320
     ```
     */
    var zoom4_3: CGFloat {
        return zoom(k: .scale4_3)
    }

    /**
     反缩放比例: 4:3
     ```
     320.zoomr4_3
     = 320 / 4 / 3
     = 320 * 3 / 4
     = 240
     ```
     */
    var zoomr4_3: CGFloat {
        return zoomr(k: .scale4_3)
    }
    
    /**
     缩放比例: 16:9
     ```
     180.zoom16_9
     = 180 * 16 / 9
     = 320
     ```
     */
    var zoom16_9: CGFloat {
        return zoom(k: .scale16_9)
    }
    
    /**
     反缩放比例: 16:9
     ```
     320.zoom16_9
     = 320 / 16 / 9
     = 320 * 9 / 16
     = 180
     ```
     */
    var zoomr16_9: CGFloat {
        return zoomr(k: .scale16_9)
    }
    
    /**
     缩放比例: 1:2
     ```
     240.zoom1_2
     = 240 * 0.5
     = 120
     ```
     */
    var zoom1_2: CGFloat {
        return self * 0.5
    }
}

// MARK: - Zoom
public extension CGFloat {
    
    /**
     缩放比例
     - experiment: width: 16, height: 9. scale: 16 / 9
     1. 已知 宽高比 + 高度, 求宽度: w = h * scale
     2. 已知 宽高比 + 宽度, 求高度: h = w / scale
     */
    
    /**
     宽高比例 4:3 缩放, 返回宽度.
     - NOTE: 实际 宽高比例 4:3
     - experiment: 返回高度
     ```
     240.w_zoom4_3
     = 240 * 4 / 3
     = 320
     ```
     */
    var w_zoom4_3: CGFloat {
        return zoom4_3
    }
    
    /**
     宽高比例 4:3 缩放, 返回高度.
     - NOTE: 实际 高宽比例 3:4. 所以使用反比例方法 zoomr
     - experiment: 返回高度
     ```
     320.h_zoom4_3
     = 320 / 4 / 3
     = 320 * 3 / 4
     = 240
     ```
     */
    var h_zoom4_3: CGFloat {
        return zoomr4_3
    }
    
    /**
     宽高比例 16:9 缩放, 返回宽度.
     - NOTE: 实际 宽高比例 16:9
     - experiment: 返回高度
     ```
     180.w_zoom16_9
     = 180 * 16 / 9
     = 320
     ```
     */
    var w_zoom16_9: CGFloat {
        return zoom16_9
    }
    
    /**
     宽高比例 16:9 缩放, 返回高度.
     - NOTE: 实际 高宽比例 9:16. 所以使用反比例方法 zoomr
     - experiment: 返回高度
     ```
     320.w_zoom16_9
     = 320 / 16 / 9
     = 320 * 9 / 16
     = 180
     ```
     */
    var h_zoom16_9: CGFloat {
        return zoomr16_9
    }
}
